package com.example.blog_system.mapper;

import com.example.blog_system.entity.UserInfo;
import com.example.blog_system.entity.vo.UserInfoVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;

/**
 * Created with IntelliJ IDEA.
 * Description: 用户映射层
 */
@Mapper
public interface UserMapper {

    /**
     * 注册功能 用 UserInfo对象 接受 前端传的参数 username和password 对象接受便于日后功能扩展
     *
     * @param userInfo
     * @return
     */
    int add(UserInfo userInfo);

    /**
     * 登录 sql
     *
     * @param username 根据用户名 查找出 用户 在控制层 校验是否正确
     * @return
     */
    UserInfo login(@Param("username") String username);

    /**
     * 更新登录时间
     *
     * @param date 新日期
     * @param id   用户id
     * @return
     */

    int updateLoginTime(@Param("date") LocalDateTime date, @Param("id") Integer id);

    /**
     * 博文数+1
     *
     * @param id 用户id
     * @return
     */

    int addBCount(@Param("id") Integer id);

    /**
     * 博文数-1
     *
     * @param id 用户id
     * @return
     */

    Integer delBCount(@Param("id") Integer id);

    /**
     * 根据 博文id 查找其作者信息
     *
     * @param id 博文id
     * @return
     */

    UserInfoVO getAuthor(@Param("id") Integer id);

    /**
     * 获赞数-1
     *
     * @param uid 用户id
     * @return
     */



    /**
     * 获赞数+1
     *
     * @param uid 用户id
     * @return
     */

    Integer addLike(@Param("uid") Integer uid);

    /**
     * 根据用户名 查找数据库里的用户名  验证 数据库里是否存在此用户名的用户
     *
     * @param username 查找的用户名
     * @return
     */

    String getUserByName(@Param("username") String username );

    String getUsernameById(@Param("uid") Integer uid);

    Integer delAuthorLiked(@Param("uid") Integer uid, @Param("likedNum") Integer likedNum);

    String getEmail(@Param("eMail") String eMail);

    Integer modifyPassword(@Param("name") String name, @Param("password") String password);

    UserInfoVO getAuthorById(@Param("id") Integer id);

    Integer modifyProfile(@Param("id") Integer id, @Param("profilePath") String profilePath);



    Integer modifyMessage(@Param("username") String username, @Param("newUsername") String newUsername, @Param("newPassword") String newPassword);

    void log(@Param("username") String username, @Param("desc") String desc);


//    UserInfo showUserInfo(String username);


}
